@using jiuyuan.数据.基础数据类
@using jiuyuan.数据.共享类
@using jiuyuan.服务
@using jiuyuan.数据.玩家类

@inherits ComponentBase

<div class="player-decision-overlay" @onclick="取消决策">
    <div class="decision-panel" @onclick:stopPropagation>
        <h2>选择你的行动</h2>
        
        <!-- 技能选择 -->
        <div class="decision-section">
            <h3>选择技能</h3>
            <div class="skills-grid">
                @foreach (var 技能 in 可用技能列表)
                {
                    <div class="skill-card @(选中技能?.Id == 技能.Id ? "selected" : "")" 
                         @onclick="() => 选择技能(技能)">
                        <div class="skill-name">@技能.名称</div>
                        <div class="skill-cost">消耗: @技能.消耗魔法值 MP</div>
                        <div class="skill-target">目标: @获取目标类型描述(技能.目标类型)</div>
                    </div>
                }
            </div>
        </div>

        <!-- 目标选择 -->
        @if (选中技能 != null)
        {
            <div class="decision-section">
                <h3>选择目标</h3>
                <div class="targets-grid">
                    @foreach (var 目标 in 获取可选目标(选中技能.目标类型))
                    {
                        <div class="target-card @(选中目标?.Id == 目标.Id ? "selected" : "")" 
                             @onclick="() => 选择目标(目标)">
                            <div class="target-name">@目标.名称</div>
                            <div class="target-stats">HP: @目标.当前生命值/@目标.当前属性.生命值</div>
                        </div>
                    }
                </div>
            </div>
        }

        <!-- 操作按钮 -->
        <div class="decision-actions">
            <button class="btn confirm-btn" 
                    disabled="@(选中技能 == null || 选中目标 == null)" 
                    @onclick="确认决策">
                确认
            </button>
            <button class="btn cancel-btn" @onclick="取消决策">
                取消
            </button>
        </div>
    </div>
</div>

@code {
    [Parameter]
    public 玩家? 当前玩家 { get; set; }

    [Parameter]
    public List<战斗单位> 所有单位 { get; set; } = new();

    [Parameter]
    public EventCallback<决策结果> 决策完成 { get; set; }

    private List<游戏元素> 可用技能列表 { get; set; } = new();
    private 游戏元素? 选中技能 { get; set; }
    private 战斗单位? 选中目标 { get; set; }

    // 组件初始化
    protected override void OnParametersSet()
    {
        if (当前玩家 != null)
        {
            // 获取玩家可用技能（魔法值足够的技能）
            可用技能列表 = 当前玩家.当前技能槽
                .Where(s => s.消耗魔法值 <= 当前玩家.当前魔法值)
                .ToList();
        }
    }

    // 选择技能
    private void 选择技能(游戏元素 技能)
    {
        选中技能 = 技能;
        选中目标 = null; // 重置目标选择
    }

    // 选择目标
    private void 选择目标(战斗单位 目标)
    {
        选中目标 = 目标;
    }

    // 确认决策
    private async Task 确认决策()
    {
        if (选中技能 != null && 选中目标 != null && 当前玩家 != null)
        {
            var 决策 = new 决策结果
            {
                技能 = 选中技能,
                目标列表 = new List<战斗单位> { 选中目标 }
            };

            // 重置选择
            选中技能 = null;
            选中目标 = null;

            // 通知父组件决策完成
            await 决策完成.InvokeAsync(决策);
        }
    }

    // 取消决策
    private void 取消决策()
    {
        选中技能 = null;
        选中目标 = null;
    }

    // 获取可选目标
    private List<战斗单位> 获取可选目标(技能目标类型 目标类型)
    {
        if (当前玩家 == null) return new List<战斗单位>();

        return 目标类型 switch
        {
            技能目标类型.自身 => new List<战斗单位> { 当前玩家 },
            技能目标类型.友方单体 => 所有单位.Where(u => u.单位类型 == 当前玩家.单位类型 && u.是否存活).ToList(),
            技能目标类型.敌方单体 => 所有单位.Where(u => u.单位类型 != 当前玩家.单位类型 && u.是否存活).ToList(),
            技能目标类型.友方群体 => 所有单位.Where(u => u.单位类型 == 当前玩家.单位类型 && u.是否存活).ToList(),
            技能目标类型.敌方群体 => 所有单位.Where(u => u.单位类型 != 当前玩家.单位类型 && u.是否存活).ToList(),
            _ => new List<战斗单位> { 当前玩家 }
        };
    }

    // 获取目标类型描述
    private string 获取目标类型描述(技能目标类型 目标类型)
    {
        return 目标类型 switch
        {
            技能目标类型.自身 => "自身",
            技能目标类型.友方单体 => "友方单体",
            技能目标类型.敌方单体 => "敌方单体",
            技能目标类型.友方群体 => "友方群体",
            技能目标类型.敌方群体 => "敌方群体",
            _ => "未知"
        };
    }
}

<style>
    .player-decision-overlay {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.7);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 1000;
    }

    .decision-panel {
        background: linear-gradient(135deg, #1a1a3a, #0a0a1a);
        border: 2px solid #4a2c8d;
        border-radius: 15px;
        padding: 25px;
        width: 80%;
        max-width: 800px;
        max-height: 90vh;
        overflow-y: auto;
        box-shadow: 0 0 30px rgba(106, 13, 173, 0.6);
    }

    .decision-panel h2 {
        color: #b19cd9;
        text-align: center;
        margin-bottom: 25px;
        font-size: 1.8rem;
    }

    .decision-section {
        margin-bottom: 25px;
    }

    .decision-section h3 {
        color: #b19cd9;
        margin-bottom: 15px;
        font-size: 1.3rem;
    }

    .skills-grid, .targets-grid {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
        gap: 15px;
    }

    .skill-card, .target-card {
        background: rgba(30, 30, 60, 0.8);
        border: 1px solid #4a2c8d;
        border-radius: 10px;
        padding: 15px;
        cursor: pointer;
        transition: all 0.3s ease;
        text-align: center;
    }

    .skill-card:hover, .target-card:hover {
        background: rgba(40, 40, 80, 0.9);
        border-color: #6a0dad;
        transform: translateY(-3px);
        box-shadow: 0 5px 15px rgba(106, 13, 173, 0.4);
    }

    .skill-card.selected, .target-card.selected {
        background: rgba(60, 30, 100, 0.9);
        border-color: #b19cd9;
        box-shadow: 0 0 15px rgba(177, 156, 217, 0.7);
    }

    .skill-name, .target-name {
        color: #e0e0ff;
        font-size: 1.1rem;
        font-weight: bold;
        margin-bottom: 8px;
    }

    .skill-cost, .skill-target, .target-stats {
        color: #a0a0e0;
        font-size: 0.9rem;
    }

    .decision-actions {
        display: flex;
        justify-content: center;
        gap: 20px;
        margin-top: 20px;
    }

    .btn {
        padding: 12px 30px;
        border: none;
        border-radius: 8px;
        font-size: 1rem;
        font-weight: bold;
        cursor: pointer;
        transition: all 0.3s ease;
    }

    .confirm-btn {
        background: linear-gradient(to right, #4CAF50, #2E7D32);
        color: white;
    }

    .confirm-btn:hover:not(:disabled) {
        background: linear-gradient(to right, #66BB6A, #388E3C);
        transform: translateY(-3px);
        box-shadow: 0 5px 15px rgba(76, 175, 80, 0.4);
    }

    .confirm-btn:disabled {
        background: #616161;
        cursor: not-allowed;
    }

    .cancel-btn {
        background: linear-gradient(to right, #8b0000, #cc0000);
        color: white;
    }

    .cancel-btn:hover {
        background: linear-gradient(to right, #a00000, #ee0000);
        transform: translateY(-3px);
        box-shadow: 0 5px 15px rgba(255, 0, 0, 0.4);
    }
</style>